<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>三大包装类</title>
		<script type="text/javascript">
			// 基本数据类型：`String`、`Number`、`Boolean`、`Null`、`Undefined`
			// 引用数据类型：`Object`
			// 在JS中为我们提供了三个包装类，通过这三个包装类可以将基本数据类型的数据转换为对象
			// - `String()`可以将基本数据类型字符串转换为`String`对象
			// - `Number()`可以将基本数据类型的数字转换为`Number`对象
			// - `Boolean()`可以将基本数据类型的布尔值转换为`Boolean`对象
			var str1 = "hello";
			var str2 = new String();
			console.log(typeof str1); // string
			console.log(typeof str2); // object
			var num1 = 3;
			var num2 = new Number(3);
			console.log(typeof num1); // string
			console.log(typeof num2); // object
			var bol1 = true;
			var bol2 = new Boolean(true);
			console.log(typeof bol1); // string
			console.log(typeof bol2); // object
			
			// 但是注意：我们在实际应用中不会使用基本数据类型的对象，
			// 如果使用基本数据类型的对象，在做一些比较时可能会带来一些不可预期的结果
			var n1 = new Number(1);
			var n2 = new Number(1);
			console.log(n1 == n2); // false
			var b = new Boolean(false);
			if(b){
				console.log(b); // Boolean {false}
			}
			
			// 方法和属性之能添加给对象，不能添加给基本数据类型
			var data = 4;
			data.hello = "hello";
			console.log(data.hello); // undefined
			
			// 当我们对一些基本数据类型的值去调用属性和方法时，浏览器会临时使用包装类将其转换为对象，然后再调用对象的属性和方法
			var s = 123;
			s = s.toString();
			console.log(s); // 123
			console.log(typeof s); // string
		</script>
	</head>
	<body>
	</body>
</html>
